home *** CD-ROM | disk | FTP | other *** search
/ Software of the Month Club 2000 October / Software of the Month - Ultimate Collection Shareware 277.iso / pc / PROGRAMS / UTILITY / WINLINUX / DATA1.CAB / programs_-_include / ASM-PPC / PTRACE.H < prev    next >
C/C++ Source or Header  |  1999-09-17  |  2KB  |  102 lines

  1. #ifndef _PPC_PTRACE_H
  2. #define _PPC_PTRACE_H
  3.  
  4. /*
  5.  * This struct defines the way the registers are stored on the
  6.  * kernel stack during a system call or other kernel entry.
  7.  *
  8.  * this should only contain volatile regs
  9.  * since we can keep non-volatile in the tss
  10.  * should set this up when only volatiles are saved
  11.  * by intr code.
  12.  *
  13.  * Since this is going on the stack, *CARE MUST BE TAKEN* to insure
  14.  * that the overall structure is a multiple of 16 bytes in length.
  15.  *
  16.  * Note that the offsets of the fields in this struct correspond with
  17.  * the PT_* values below.  This simplifies arch/ppc/kernel/ptrace.c.
  18.  */
  19.  
  20. #ifndef __ASSEMBLY__
  21. struct pt_regs {
  22.     unsigned long gpr[32];
  23.     unsigned long nip;
  24.     unsigned long msr;
  25.     unsigned long orig_gpr3; /* Used for restarting system calls */
  26.     unsigned long ctr;
  27.     unsigned long link;
  28.     unsigned long xer;
  29.     unsigned long ccr;
  30.     unsigned long mq;    /* 601 only (not used at present) */
  31.                 /* Used on APUS to hold IPL value. */
  32.     unsigned long trap;    /* Reason for being here */
  33.     unsigned long dar;    /* Fault registers */
  34.     unsigned long dsisr;
  35.     unsigned long result;   /* Result of a system call */
  36. };
  37. #endif
  38.  
  39. #define STACK_FRAME_OVERHEAD    16    /* size of minimum stack frame */
  40.  
  41. /* Size of stack frame allocated when calling signal handler. */
  42. #define __SIGNAL_FRAMESIZE    64
  43.  
  44. #define instruction_pointer(regs) ((regs)->nip)
  45. #define user_mode(regs) ((regs)->msr & 0x4000)
  46.  
  47. /*
  48.  * Offsets used by 'ptrace' system call interface.
  49.  * These can't be changed without breaking binary compatibility
  50.  * with MkLinux, etc.
  51.  */
  52. #define PT_R0    0
  53. #define PT_R1    1
  54. #define PT_R2    2
  55. #define PT_R3    3
  56. #define PT_R4    4
  57. #define PT_R5    5
  58. #define PT_R6    6
  59. #define PT_R7    7
  60. #define PT_R8    8
  61. #define PT_R9    9
  62. #define PT_R10    10
  63. #define PT_R11    11
  64. #define PT_R12    12
  65. #define PT_R13    13
  66. #define PT_R14    14
  67. #define PT_R15    15
  68. #define PT_R16    16
  69. #define PT_R17    17
  70. #define PT_R18    18
  71. #define PT_R19    19
  72. #define PT_R20    20
  73. #define PT_R21    21
  74. #define PT_R22    22
  75. #define PT_R23    23
  76. #define PT_R24    24
  77. #define PT_R25    25
  78. #define PT_R26    26
  79. #define PT_R27    27
  80. #define PT_R28    28
  81. #define PT_R29    29
  82. #define PT_R30    30
  83. #define PT_R31    31
  84.  
  85. #define PT_NIP    32
  86. #define PT_MSR    33
  87. #ifdef __KERNEL__
  88. #define PT_ORIG_R3 34
  89. #endif
  90. #define PT_CTR    35
  91. #define PT_LNK    36
  92. #define PT_XER    37
  93. #define PT_CCR    38
  94. #define PT_MQ    39
  95.  
  96. #define PT_FPR0    48    /* each FP reg occupies 2 slots in this space */
  97. #define PT_FPR31 (PT_FPR0 + 2*31)
  98. #define PT_FPSCR (PT_FPR0 + 2*32 + 1)
  99.  
  100. #endif
  101.  
  102.